/**
 * IPC通信服务
 * 与主进程通信的API封装
 * @author LYC
 * @date 2025-09-21
 */

export interface LoginSuccessData {
  id: string
  username: string
  token: string
  loginTime: string
}

export interface LogoutData {
  reason?: string
}

export interface NotificationConfig {
  title: string
  body: string
  icon?: string
  silent?: boolean
  urgency?: 'normal' | 'critical' | 'low'
}

/**
 * 发送登录成功消息到主进程
 */
export function sendLoginSuccess(data: LoginSuccessData): void {
  if (!window.electron?.ipcRenderer) {
    console.error('IPC通道不可用，无法发送登录成功消息')
    return
  }

  window.electron.ipcRenderer.send('login-success', data)
}

/**
 * 发送登出消息到主进程
 */
export function sendLogout(data?: LogoutData): void {
  if (!window.electron?.ipcRenderer) {
    console.error('IPC通道不可用，无法发送登出消息')
    return
  }

  window.electron.ipcRenderer.send('logout', data)
}

/**
 * 获取应用信息
 */
export async function getAppInfo(): Promise<{
  name: string
  version: string
  description: string
  author: string
}> {
  if (!window.electron?.ipcRenderer) {
    console.error('IPC通道不可用，无法获取应用信息')
    throw new Error('IPC通道不可用')
  }

  return window.electron.ipcRenderer.invoke('get-app-info')
}

/**
 * 显示通知
 */
export async function showNotification(config: NotificationConfig, id?: string): Promise<string> {
  if (!window.electron?.ipcRenderer) {
    console.error('IPC通道不可用，无法显示通知')
    throw new Error('IPC通道不可用')
  }

  return window.electron.ipcRenderer.invoke('show-notification', config, id)
}

/**
 * 获取认证状态
 */
export async function getAuthState(): Promise<{
  state: string
  user: any | null
}> {
  if (!window.electron?.ipcRenderer) {
    console.error('IPC通道不可用，无法获取认证状态')
    throw new Error('IPC通道不可用')
  }

  return window.electron.ipcRenderer.invoke('get-auth-state')
}

/**
 * 获取当前用户信息
 */
export async function getCurrentUser(): Promise<any | null> {
  if (!window.electron?.ipcRenderer) {
    console.error('IPC通道不可用，无法获取当前用户信息')
    throw new Error('IPC通道不可用')
  }

  return window.electron.ipcRenderer.invoke('get-current-user')
}
